home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
os2
/
pvm34b3.zip
/
pvm34b3
/
pvm3
/
pvmgs
/
pvmgs_mac.h
< prev
next >
Wrap
C/C++ Source or Header
|
1997-07-22
|
4KB
|
114 lines
/* $Id: pvmgs_mac.h,v 1.6 1997/07/09 13:51:33 pvmsrc Exp $ */
/*
* PVM version 3.4: Parallel Virtual Machine System
* University of Tennessee, Knoxville TN.
* Oak Ridge National Laboratory, Oak Ridge TN.
* Emory University, Atlanta GA.
* Authors: J. J. Dongarra, G. E. Fagg, M. Fischer
* G. A. Geist, J. A. Kohl, R. J. Manchek, P. Mucci,
* P. M. Papadopoulos, S. L. Scott, and V. S. Sunderam
* (C) 1997 All Rights Reserved
*
* NOTICE
*
* Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby granted
* provided that the above copyright notice appear in all copies and
* that both the copyright notice and this permission notice appear in
* supporting documentation.
*
* Neither the Institutions (Emory University, Oak Ridge National
* Laboratory, and University of Tennessee) nor the Authors make any
* representations about the suitability of this software for any
* purpose. This software is provided ``as is'' without express or
* implied warranty.
*
* PVM version 3 was funded in part by the U.S. Department of Energy,
* the National Science Foundation and the State of Tennessee.
*/
/* File: pvmgs_mac.h - various macros that are used throughout the */
/* group server */
/* Set the pvm_errno to info, print the error, and then return the */
/* error */
#define DO_ERROR_RTN( info, caller ) \
{ pvm_errno = info; pvm_perror( caller ); return( info ); }
/* Allocate new memory for a string based if length > mxlen */
#define REALLOCSTRING( length, mxlen, name, caller ) \
{ if ( (length) > (mxlen) ) \
{ \
if ( name != (char *) NULL ) \
PVM_FREE( name ); \
name = (char *) PVM_ALLOC( sizeof(char) * (length + 1), \
caller ); \
mxlen = length; \
} \
}
/* Init a send buffer and pack the single integer result */
/* caller is used for error reporting */
#define PK_IRESULT( result, caller) \
{ if ( pvm_initsend( PvmDataDefault ) < 0 ) \
pvm_perror( caller ); \
if ( pvm_pkint( &(result), 1, 1 ) < 0 ) \
pvm_perror( caller ); \
}
/* Pack state. If state is STATIC then pack all group information. */
#define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \
{ if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \
pvm_perror( caller ); \
if ( state == STATIC ) \
if ( gs_newstaticcache( tid, name, hash_list, ngroups, \
caller ) == PvmgsNotCached ) \
gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \
NOCREATE ) ); \
}
/* Send packed buffer to tid, msgtag. Caller used for err reporting */
#define SENDRESULT( tid, msgtag, caller ) \
if ( pvm_send( tid, msgtag ) < 0 ) \
pvm_perror( caller );
/* Create a send buffer, pack a single integer, and send it */
#define SENDINTRESULT( result, tid, msgtag, caller ) \
{ PK_IRESULT( result, caller ); SENDRESULT( tid, msgtag, caller ) }
/* Begin a trace event, keep track of the current trace level */
/* Optionally packs a single integer argument */
#define BGN_TRACE( event, strarg, did, intarg ) \
if ( TEV_EXCLUSIVE ) { \
if (TEV_DO_TRACE( event, TEV_EVENT_ENTRY ) ) \
{ \
TEV_PACK_STRING( TEV_DID_GN, TEV_DATA_SCALAR, \
strarg ? strarg: "", 1, 1 ); \
if ( intarg != (int *) NULL ) \
TEV_PACK_INT( did, TEV_DATA_SCALAR, intarg, 1, 1 ); \
TEV_FIN; \
} \
}
/* End trace event and send back an integer */
#define END_TRACE( event, did, intarg ) \
if ( TEV_AMEXCL ) { \
if (TEV_DO_TRACE( event, TEV_EVENT_EXIT ) ) \
{ \
TEV_PACK_INT( did, TEV_DATA_SCALAR, intarg, 1, 1 ); \
TEV_FIN; \
} \
TEV_ENDEXCL; \
}
/* Max, min. Interval confines the argument to the interval */
#ifndef MAX
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#endif
#ifndef MIN
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#endif
#define INTERVAL(x,a,y) MIN(MAX((x),(a)), (y))